package org.jeecg.modules.mes.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.mes.entity.MesTaskParticipant;

import java.math.BigDecimal;
import java.util.List;

/**
 * @Description: 任务参与者服务
 * @Author: jeecg-boot
 * @Date: 2025-08-30
 * @Version: V2.0
 */
public interface IMesTaskParticipantService extends IService<MesTaskParticipant> {

    /**
     * 员工领取任务（支持部分领取）
     * @param taskId 任务ID
     * @param employeeId 员工ID
     * @param claimQuantity 领取数量
     * @param participationRatio 参与比例
     * @return 是否成功
     */
    boolean claimTask(String taskId, String employeeId, Integer claimQuantity, BigDecimal participationRatio);

    /**
     * 获取任务的所有参与者
     * @param taskId 任务ID
     * @return 参与者列表
     */
    List<MesTaskParticipant> getTaskParticipants(String taskId);

    /**
     * 更新参与者完成进度
     * @param participantId 参与者ID
     * @param completedQuantity 完成数量
     * @return 是否成功
     */
    boolean updateParticipantProgress(String participantId, Integer completedQuantity);

    /**
     * 完成任务参与
     * @param participantId 参与者ID
     * @param qualityScore 质量评分
     * @param efficiencyScore 效率评分
     * @return 是否成功
     */
    boolean completeParticipation(String participantId, BigDecimal qualityScore, BigDecimal efficiencyScore);

    /**
     * 获取员工参与的任务列表
     * @param employeeId 员工ID
     * @param status 状态（可选）
     * @return 参与者列表
     */
    List<MesTaskParticipant> getEmployeeParticipations(String employeeId, Integer status);

    /**
     * 开始任务执行
     * @param participantId 参与者ID
     * @return 是否成功
     */
    boolean startTaskExecution(String participantId);

    /**
     * 暂停任务执行
     * @param participantId 参与者ID
     * @param reason 暂停原因
     * @return 是否成功
     */
    boolean pauseTaskExecution(String participantId, String reason);

    /**
     * 恢复任务执行
     * @param participantId 参与者ID
     * @return 是否成功
     */
    boolean resumeTaskExecution(String participantId);

    /**
     * 获取任务的参与者统计信息
     * @param taskId 任务ID
     * @return 统计信息
     */
    MesTaskParticipant getTaskParticipantStats(String taskId);

    /**
     * 检查员工是否已参与该任务
     * @param taskId 任务ID
     * @param employeeId 员工ID
     * @return 参与者记录
     */
    MesTaskParticipant checkEmployeeParticipation(String taskId, String employeeId);

    /**
     * 移除任务参与者
     * @param participantId 参与者ID
     * @return 是否成功
     */
    boolean removeParticipant(String participantId);

    /**
     * 批量分配任务给多个员工
     * @param taskId 任务ID
     * @param employeeIds 员工ID列表
     * @param quantities 对应的数量列表
     * @param ratios 对应的比例列表
     * @return 是否成功
     */
    boolean batchAssignTask(String taskId, List<String> employeeIds, List<Integer> quantities, List<BigDecimal> ratios);

    void removeEmployeeParticipation(String taskId, String employeeId);
}
